package newFeatures.streamAPI;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * Created with IntelliJ IDEA.
 * ClassName: Api01
 * Package: newFeatures.streamAPI
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 * Date: 2023-12-25
 * Time: 0:04
 */

//创建之后的中间操作
public class Api01 {

    public static void main(String[] args) {
        //排序
        Integer[] arr = new Integer[]{134,23,445,213,35,235,563,74,29};
        String[] str = new String[]{"GG","DD","MM","SS","JJ"};

        Stream<Integer> stream = Arrays.stream(arr);
        //自然排序
        stream.sorted().forEach(System.out::println);
        //还是原来的数组 不会改变原来的对象  会返回一个持有结果的新的stream
        System.out.println(Arrays.toString(arr));

        //升序
        Arrays.stream(str).sorted().forEach(System.out::println);

        //对象排序 要实现自然排序 实现相应的接口 Comparable



    }

    public static void main2(String[] args) {
        //映射  函数 map
        List<String> list = Arrays.asList("aa","bb","cc","dd");
        //走字符串的方法 映射成大写
        list.stream().map(str -> str.toUpperCase()).forEach(System.out::println);
        list.stream().map(String::toUpperCase).forEach(System.out::println);
    }

    //筛选与切片
    public static void main1(String[] args) {

        List<Integer> list = new ArrayList<>();
        list.add(100);
        list.add(200);
        list.add(300);
        list.add(500);
        list.add(500);
        list.add(500);
        list.add(700);
        list.add(800);
        list.add(900);

        //创建stream流对象
        Stream<Integer> stream = list.stream();
        //Predicate<? super T> predicate 出现函数式接口 就可以使用lambda表达式了
        //filter方法过滤 找出大于400的值  forEach终止操作
        stream.filter(emp -> emp > 400).forEach(System.out::println);
        //中间操作 之后 要有一个终止操作

        System.out.println("------");

        //stream一旦执行了终止操作就不能在执行了 limit 输出指定的前几个元素
        list.stream().limit(2).forEach(System.out::println);

        //skip 表示跳过前几个元素 然后开始往后走  不会越界 过了就过了
        list.stream().skip(5).forEach(System.out::println);

        //distinct() 筛选 去除重复操作  底层通过hashcode和equals去除重复操作
        System.out.println("去重");
        list.stream().distinct().forEach(System.out::println);


    }

}
